package com.uniknow.app.manager;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.DatabaseTableConfig;
import com.j256.ormlite.table.TableUtils;
import com.uniknow.app.R;
import com.uniknow.app.bin.TBCallLog;
import com.uniknow.app.bin.TBFriend;
import com.uniknow.app.bin.TBFriendTmp;
import com.uniknow.app.bin.TBSMS;
import com.uniknow.app.bin.UserBean;
import com.uniknow.app.util.Sysout;
import com.uniknow.app.util.Util;

/**
 * 类名称：DatabaseHelper   
 * 类描述：数据库帮助类
 * @创建者：韩创    
 * @创建时间：2015年3月12日   
 * @变更记录：2015年3月12日下午2:25:44 by 记录变更人
 */
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
	
	private static String DATABASE_NAME = "uinshow.db";
	private static final int DATABASE_VERSION = 1;
	private static DatabaseHelper databaseHelper;
	
	private List<Class<?>> listClazz = new ArrayList<Class<?>>();
	
	public static DatabaseHelper getHelper(Context context){
		DATABASE_NAME = Util.getDirectPath(context)+"test.db";
		if(databaseHelper == null){
			databaseHelper = new DatabaseHelper(context);
		}		
		return databaseHelper ;
	}
	
	/**
	 * @param context
	 * @param databaseName 数据库名称
	 * @param factory
	 * @param databaseVersion 数据库版本
	 */
	private DatabaseHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
		initTables();
	}
	/**
	 * 数据库表
	 * 方法名：initTables
	 * 描述：
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： void   
	 * @创建时间：  2015年3月12日 
	 * @创建者：韩创
	 * @变更记录：2015年3月12日下午2:21:53 by
	 */
	private void initTables(){
		listClazz.add(UserBean.class);
		listClazz.add(TBCallLog.class);
		listClazz.add(TBFriend.class);
		listClazz.add(TBFriendTmp.class);
		listClazz.add(TBSMS.class);
	}
	
	@Override
	public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
		try {
			for(Class<?> clazz:listClazz){
				TableUtils.createTableIfNotExists(connectionSource, clazz);
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	@Override
	public void onUpgrade(SQLiteDatabase db, ConnectionSource arg1, int oldVersion, int newVersion) {
		Sysout.i("oldVersion = "+oldVersion+" newVersion = "+newVersion);
		String sql = "";
		switch(oldVersion){
		case 1:
			//sql = "ALTER TABLE ls_dietitians_message ADD COLUMN userid int DEFAULT 0;";
			//db.execSQL(sql);
			//Sysout.i("sql = "+sql);
		case 2:
		}
		
		
	}
	
	/**
	 * delete all table from database
	 * @throws SQLException
	 */
	public void deleteTable() throws SQLException {
		for(Class<?> clazz:listClazz){
			TableUtils.dropTable(connectionSource, clazz, true);
		}
		
	}
	
	/**
	 * clear all data from database
	 * @throws SQLException
	 */
	public void deleteData() throws SQLException {
		for(Class<?> clazz:listClazz){
			TableUtils.clearTable(connectionSource, clazz);
		}
		
	}
	
	public void deleteData(Class<?> clazz) throws SQLException{
		TableUtils.clearTable(connectionSource, clazz);
	}
	
	/**
	 * 方法名：getTableName
	 * 描述：根据类获取它的数据库表名
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： String   
	 * @创建时间：  2015年3月12日 
	 * @创建者：韩创
	 * @变更记录：2015年3月12日下午3:30:58 by
	 */
	public String getTableName(Class<?> clazz){
		String tableName = "";
		try {
			DatabaseTableConfig<?> dataTableConfig = DatabaseTableConfig.fromClass(connectionSource, clazz);
			tableName = dataTableConfig.getTableName();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return tableName;
	}
	
	/**
	 * 方法名：execSQL
	 * 描述：
	 * @参数：   参数名  参数类型   参数描述
	 * @返回值类型： String   
	 * @创建时间：  2014年10月13日 
	 * @创建者：韩创
	 * @变更记录：2014年10月13日上午10:05:02 by
	 */
	public String execSQL(String sql){
		String str = "[success]";
		SQLiteDatabase mydb = this.getWritableDatabase();
		try{
			mydb.execSQL(sql);
		}catch(Exception e){
			str = e.getMessage();
		}
		return str;
	}
	
	public static void clearHelper(){
		if(databaseHelper != null){
			databaseHelper.close();
			databaseHelper = null;
		}	
	}
	
	public void close() {
		super.close();
		databaseHelper = null;
	}

}
